<html>
 <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>代码批量生成器 ----- 作者:魏子钧</title>

<style type="text/css">
body {
	font-size:12px;
	line-height:16px;
}

input {
	font-size:12px;
}
textarea {
	font-size:12px;
	line-height:20px;
}
</style>
<script type="text/javascript">

function $(id){
	return document.getElementById(id);
}

function trim(str){
	return str.replace(/^\s+|\s+$/g, '');

}
function compileTemplate(template){
		var TEMPLATE_START="#{";
		var TEMPLATE_END="/}";
		var templateC=[];
		var snippets=[];
		var current=0;
		while(true){
			var start= template.indexOf( TEMPLATE_START ,current);
			var sBegin=start+2;
			var sEnd=template.indexOf( TEMPLATE_END ,sBegin);

			if (sBegin>=2 && sEnd>sBegin){
				templateC.push(template.substring(current,start) );
				var sn=template.substring(sBegin,sEnd);
				if (sn.indexOf("#")==0){
					sn=eval( sn.substring(1) );
				}else{
					snippets.push(templateC.length);
				}
				templateC.push( sn );
			}else{
				templateC.push( template.substring(current) );
				break;
			}
			current=sEnd+2;
		}
		templateC.push(snippets);
		return templateC;
}

function runTemplate(templateC,invar){
	var VAR=invar;

	var snippets=templateC[templateC.length-1];

	var rs=[];
	var sIdx=0;

	for (var i=0;i<templateC.length-1;i++ ){
		if (snippets[sIdx]==i){
			rs.push(  eval(templateC[i]) );
			sIdx++;
		}else {
			rs.push( templateC[i] )
		}
	}

	return rs.join("");

}


////////////////////////////////////////////////
function genCode(){
	$("result").value="";
	var templateC=compileTemplate( trim( $("templates").value ) );

	var tempRs=[];
	var st=$("startNum").value/1;
	var et=st+ $("number").value/1

	var ex=$("varEx").value;
	var VAR=st;
	for (var i=st;i<et  ;i++ ){
		tempRs.push(runTemplate(templateC,VAR));
		eval(ex);
	}
	$("startNum").value=et;
	$("result").value=tempRs.join("\n\n");
}

</script>
 </head>

 <body>
 根据模板批量生成代码(sql html java....).<br/>
模板中 #{ ... /} 之间的数据将被 作为js脚本执行, 而其中VAR关键字代表的就是 seed 的值.<br/>
模板分成两部分来执行, compile 和 run.<br/>
#{..../}之间的部分在run期间被执行, #{#...../} 之间的部分在编译期执行.编译期执行的代码中不能传入seed.

<br/>
生成代码条数 : <input type="text" id="number" value="75" /><br/>
VAR 起始值 (VAR 是创建代码的seed) : <input type="text" id="startNum" value="1" /><br/>
VAR 变化公式(每次迭代时VAR值的变化公式) : <input type="text" id="varEx" value="VAR=VAR+1" /><br/>
代码模板 : <br/>
  <textarea id="templates" rows="10" cols="120">
insert into STUDENT_INFO (NAME,GENDER,BIRTHDAY,DEPARTMENT,MEMO ) values(  '学生#{ VAR /}' ,  #{ VAR%3 /} ,  '198#{ VAR%6 +1+ VAR%2 /}-#{ VAR%12 +1 /}-#{ VAR%20 +3 /}' ,  #{ VAR%6+1 /} ,  '' );

  </textarea><br/>
<input type="button" value="生成代码" onclick="genCode()"/> <br/>

  <textarea id="result" style="line-height:16px;" rows="15" cols="120">
  </textarea><br/>
 </body>
</html>
